#pragma once

#include"Events/Event.h"
//#include"Core/Base.h"
#include<string>
#include<sstream>
#include<stdint.h>

namespace myMiniEngine {
	struct WindowProps {
	std::string Titile;
	uint32_t Width;
	uint32_t Height;

	WindowProps(const std::string& title="myMiniEngine",uint32_t width=1280,uint32_t height=720):Titile(title),Width(width),Height(height){}

	};

	class MGE_API Window {
	public:
		using EventCallbackFn = std::function<void(Event&)>;

		virtual ~Window(){}
		

		virtual void OnUpdate() = 0;

		virtual unsigned int GetWidth()const = 0;
		virtual unsigned int GetHeight()const = 0;

		virtual void SetEventCallback(const EventCallbackFn& callback) = 0;
		virtual void SetVSync(bool enabled) = 0;
		virtual bool IsVSync() const = 0;

		virtual void* GetNativeWindow() const = 0;

		//static Scope<Window> Create(const WindowProps& props = WindowProps());
		static Window* Create(const WindowProps& props = WindowProps());
	
	};

}